home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / pt-play.s < prev    next >
Text File  |  1997-01-31  |  22KB  |  1,144 lines

  1. ;********************************************
  2. ;* ----- Protracker V1.1B Playroutine ----- *
  3. ;* Lars "Zap" Hamre/Amiga Freelancers 1991  *
  4. ;* Bekkeliveien 10, N-2010 STRØMMEN, Norway *
  5. ;********************************************
  6.  
  7. ; VBlank Version 2:
  8. ; Call mt_init to initialize the routine, then call mt_music on
  9. ; each vertical blank (50 Hz). To end the song and turn off all
  10. ; voices, call mt_end.
  11.  
  12. ; This playroutine is not very fast, optimized or well commented,
  13. ; but all the new commands in PT1.1A should work.
  14. ; If it's not good enough, you'll have to change it yourself.
  15. ; We'll try to write a faster routine soon...
  16.  
  17. ; Changes from V1.0C playroutine:
  18. ; - Vibrato depth changed to be compatible with Noisetracker 2.0.
  19. ;   You'll have to double all vib. depths on old PT modules.
  20. ; - Funk Repeat changed to Invert Loop.
  21. ; - Period set back earlier when stopping an effect.
  22.  
  23. DMAWait = 300 ; Set this as low as possible without losing low notes.
  24.  
  25. n_note        EQU    0  ; W
  26. n_cmd        EQU    2  ; W
  27. n_cmdlo        EQU    3  ; B
  28. n_start        EQU    4  ; L
  29. n_length    EQU    8  ; W
  30. n_loopstart    EQU    10 ; L
  31. n_replen    EQU    14 ; W
  32. n_period    EQU    16 ; W
  33. n_finetune    EQU    18 ; B
  34. n_volume    EQU    19 ; B
  35. n_dmabit    EQU    20 ; W
  36. n_toneportdirec    EQU    22 ; B
  37. n_toneportspeed    EQU    23 ; B
  38. n_wantedperiod    EQU    24 ; W
  39. n_vibratocmd    EQU    26 ; B
  40. n_vibratopos    EQU    27 ; B
  41. n_tremolocmd    EQU    28 ; B
  42. n_tremolopos    EQU    29 ; B
  43. n_wavecontrol    EQU    30 ; B
  44. n_glissfunk    EQU    31 ; B
  45. n_sampleoffset    EQU    32 ; B
  46. n_pattpos    EQU    33 ; B
  47. n_loopcount    EQU    34 ; B
  48. n_funkoffset    EQU    35 ; B
  49. n_wavestart    EQU    36 ; L
  50. n_reallength    EQU    40 ; W
  51.  
  52.  SECTION banana,code_c
  53.  
  54. start:
  55.  
  56.  bsr mt_init
  57.  
  58. loop:
  59.  btst #6,$bfe001
  60.  beq.s end
  61.  btst #5,$dff01f
  62.  beq.s loop
  63.  bsr mt_music
  64.  bra loop
  65.  
  66.  bsr mt_end
  67.  
  68. end:
  69.  rts
  70.  
  71. mt_init    LEA    mt_data,A0
  72.     MOVE.L    A0,mt_SongDataPtr
  73.     MOVE.L    A0,A1
  74.     LEA    952(A1),A1
  75.     MOVEQ    #127,D0
  76.     MOVEQ    #0,D1
  77. mtloop    MOVE.L    D1,D2
  78.     SUBQ.W    #1,D0
  79. mtloop2    MOVE.B    (A1)+,D1
  80.     CMP.B    D2,D1
  81.     BGT.S    mtloop
  82.     DBRA    D0,mtloop2
  83.     ADDQ.B    #1,D2
  84.             
  85.     LEA    mt_SampleStarts(PC),A1
  86.     ASL.L    #8,D2
  87.     ASL.L    #2,D2
  88.     ADD.L    #1084,D2
  89.     ADD.L    A0,D2
  90.     MOVE.L    D2,A2
  91.     MOVEQ    #30,D0
  92. mtloop3    CLR.L    (A2)
  93.     MOVE.L    A2,(A1)+
  94.     MOVEQ    #0,D1
  95.     MOVE.W    42(A0),D1
  96.     ASL.L    #1,D1
  97.     ADD.L    D1,A2
  98.     ADD.L    #30,A0
  99.     DBRA    D0,mtloop3
  100.  
  101.     OR.B    #2,$BFE001
  102.     MOVE.B    #6,mt_speed
  103.     CLR.B    mt_counter
  104.     CLR.B    mt_SongPos
  105.     CLR.W    mt_PatternPos
  106. mt_end    CLR.W    $DFF0A8
  107.     CLR.W    $DFF0B8
  108.     CLR.W    $DFF0C8
  109.     CLR.W    $DFF0D8
  110.     MOVE.W    #$F,$DFF096
  111.     RTS
  112.  
  113. mt_music
  114.     MOVEM.L    D0-D4/A0-A6,-(SP)
  115.     ADDQ.B    #1,mt_counter
  116.     MOVE.B    mt_counter(PC),D0
  117.     CMP.B    mt_speed(PC),D0
  118.     BLO.S    mt_NoNewNote
  119.     CLR.B    mt_counter
  120.     TST.B    mt_PattDelTime2
  121.     BEQ.S    mt_GetNewNote
  122.     BSR.S    mt_NoNewAllChannels
  123.     BRA    mt_dskip
  124.  
  125. mt_NoNewNote
  126.     BSR.S    mt_NoNewAllChannels
  127.     BRA    mt_NoNewPosYet
  128.  
  129. mt_NoNewAllChannels
  130.     LEA    $DFF0A0,A5
  131.     LEA    mt_chan1temp(PC),A6
  132.     BSR    mt_CheckEfx
  133.     LEA    $DFF0B0,A5
  134.     LEA    mt_chan2temp(PC),A6
  135.     BSR    mt_CheckEfx
  136.     LEA    $DFF0C0,A5
  137.     LEA    mt_chan3temp(PC),A6
  138.     BSR    mt_CheckEfx
  139.     LEA    $DFF0D0,A5
  140.     LEA    mt_chan4temp(PC),A6
  141.     BRA    mt_CheckEfx
  142.  
  143. mt_GetNewNote
  144.     MOVE.L    mt_SongDataPtr(PC),A0
  145.     LEA    12(A0),A3
  146.     LEA    952(A0),A2    ;pattpo
  147.     LEA    1084(A0),A0    ;patterndata
  148.     MOVEQ    #0,D0
  149.     MOVEQ    #0,D1
  150.     MOVE.B    mt_SongPos(PC),D0
  151.     MOVE.B    (A2,D0.W),D1
  152.     ASL.L    #8,D1
  153.     ASL.L    #2,D1
  154.     ADD.W    mt_PatternPos(PC),D1
  155.     CLR.W    mt_DMACONtemp
  156.  
  157.     LEA    $DFF0A0,A5
  158.     LEA    mt_chan1temp(PC),A6
  159.     BSR.S    mt_PlayVoice
  160.     LEA    $DFF0B0,A5
  161.     LEA    mt_chan2temp(PC),A6
  162.     BSR.S    mt_PlayVoice
  163.     LEA    $DFF0C0,A5
  164.     LEA    mt_chan3temp(PC),A6
  165.     BSR.S    mt_PlayVoice
  166.     LEA    $DFF0D0,A5
  167.     LEA    mt_chan4temp(PC),A6
  168.     BSR.S    mt_PlayVoice
  169.     BRA    mt_SetDMA
  170.  
  171. mt_PlayVoice
  172.     TST.L    (A6)
  173.     BNE.S    mt_plvskip
  174.     BSR    mt_PerNop
  175. mt_plvskip
  176.     MOVE.L    (A0,D1.L),(A6)
  177.     ADDQ.L    #4,D1
  178.     MOVEQ    #0,D2
  179.     MOVE.B    n_cmd(A6),D2
  180.     AND.B    #$F0,D2
  181.     LSR.B    #4,D2
  182.     MOVE.B    (A6),D0
  183.     AND.B    #$F0,D0
  184.     OR.B    D0,D2
  185.     TST.B    D2
  186.     BEQ    mt_SetRegs
  187.     MOVEQ    #0,D3
  188.     LEA    mt_SampleStarts(PC),A1
  189.     MOVE    D2,D4
  190.     SUBQ.L    #1,D2
  191.     ASL.L    #2,D2
  192.     MULU    #30,D4
  193.     MOVE.L    (A1,D2.L),n_start(A6)
  194.     MOVE.W    (A3,D4.L),n_length(A6)
  195.     MOVE.W    (A3,D4.L),n_reallength(A6)
  196.     MOVE.B    2(A3,D4.L),n_finetune(A6)
  197.     MOVE.B    3(A3,D4.L),n_volume(A6)
  198.     MOVE.W    4(A3,D4.L),D3 ; Get repeat
  199.     TST.W    D3
  200.     BEQ.S    mt_NoLoop
  201.     MOVE.L    n_start(A6),D2    ; Get start
  202.     ASL.W    #1,D3
  203.     ADD.L    D3,D2        ; Add repeat
  204.     MOVE.L    D2,n_loopstart(A6)
  205.     MOVE.L    D2,n_wavestart(A6)
  206.     MOVE.W    4(A3,D4.L),D0    ; Get repeat
  207.     ADD.W    6(A3,D4.L),D0    ; Add replen
  208.     MOVE.W    D0,n_length(A6)
  209.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  210.     MOVEQ    #0,D0
  211.     MOVE.B    n_volume(A6),D0
  212.     MOVE.W    D0,8(A5)    ; Set volume
  213.     BRA.S    mt_SetRegs
  214.  
  215. mt_NoLoop
  216.     MOVE.L    n_start(A6),D2
  217.     ADD.L    D3,D2
  218.     MOVE.L    D2,n_loopstart(A6)
  219.     MOVE.L    D2,n_wavestart(A6)
  220.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  221.     MOVEQ    #0,D0
  222.     MOVE.B    n_volume(A6),D0
  223.     MOVE.W    D0,8(A5)    ; Set volume
  224. mt_SetRegs
  225.     MOVE.W    (A6),D0
  226.     AND.W    #$0FFF,D0
  227.     BEQ    mt_CheckMoreEfx    ; If no note
  228.     MOVE.W    2(A6),D0
  229.     AND.W    #$0FF0,D0
  230.     CMP.W    #$0E50,D0
  231.     BEQ.S    mt_DoSetFineTune
  232.     MOVE.B    2(A6),D0
  233.     AND.B    #$0F,D0
  234.     CMP.B    #3,D0    ; TonePortamento
  235.     BEQ.S    mt_ChkTonePorta
  236.     CMP.B    #5,D0
  237.     BEQ.S    mt_ChkTonePorta
  238.     CMP.B    #9,D0    ; Sample Offset
  239.     BNE.S    mt_SetPeriod
  240.     BSR    mt_CheckMoreEfx
  241.     BRA.S    mt_SetPeriod
  242.  
  243. mt_DoSetFineTune
  244.     BSR    mt_SetFineTune
  245.     BRA.S    mt_SetPeriod
  246.  
  247. mt_ChkTonePorta
  248.     BSR    mt_SetTonePorta
  249.     BRA    mt_CheckMoreEfx
  250.  
  251. mt_SetPeriod
  252.     MOVEM.L    D0-D1/A0-A1,-(SP)
  253.     MOVE.W    (A6),D1
  254.     AND.W    #$0FFF,D1
  255.     LEA    mt_PeriodTable(PC),A1
  256.     MOVEQ    #0,D0
  257.     MOVEQ    #36,D7
  258. mt_ftuloop
  259.     CMP.W    (A1,D0.W),D1
  260.     BHS.S    mt_ftufound
  261.     ADDQ.L    #2,D0
  262.     DBRA    D7,mt_ftuloop
  263. mt_ftufound
  264.     MOVEQ    #0,D1
  265.     MOVE.B    n_finetune(A6),D1
  266.     MULU    #36*2,D1
  267.     ADD.L    D1,A1
  268.     MOVE.W    (A1,D0.W),n_period(A6)
  269.     MOVEM.L    (SP)+,D0-D1/A0-A1
  270.  
  271.     MOVE.W    2(A6),D0
  272.     AND.W    #$0FF0,D0
  273.     CMP.W    #$0ED0,D0 ; Notedelay
  274.     BEQ    mt_CheckMoreEfx
  275.  
  276.     MOVE.W    n_dmabit(A6),$DFF096
  277.     BTST    #2,n_wavecontrol(A6)
  278.     BNE.S    mt_vibnoc
  279.     CLR.B    n_vibratopos(A6)
  280. mt_vibnoc
  281.     BTST    #6,n_wavecontrol(A6)
  282.     BNE.S    mt_trenoc
  283.     CLR.B    n_tremolopos(A6)
  284. mt_trenoc
  285.     MOVE.L    n_start(A6),(A5)    ; Set start
  286.     MOVE.W    n_length(A6),4(A5)    ; Set length
  287.     MOVE.W    n_period(A6),D0
  288.     MOVE.W    D0,6(A5)        ; Set period
  289.     MOVE.W    n_dmabit(A6),D0
  290.     OR.W    D0,mt_DMACONtemp
  291.     BRA    mt_CheckMoreEfx
  292.  
  293. mt_SetDMA
  294.     MOVE.W    #300,D0
  295. mt_WaitDMA
  296.     DBRA    D0,mt_WaitDMA
  297.     MOVE.W    mt_DMACONtemp(PC),D0
  298.     OR.W    #$8000,D0
  299.     MOVE.W    D0,$DFF096
  300.     MOVE.W    #300,D0
  301. mt_WaitDMA2
  302.     DBRA    D0,mt_WaitDMA2
  303.  
  304.     LEA    $DFF000,A5
  305.     LEA    mt_chan4temp(PC),A6
  306.     MOVE.L    n_loopstart(A6),$D0(A5)
  307.     MOVE.W    n_replen(A6),$D4(A5)
  308.     LEA    mt_chan3temp(PC),A6
  309.     MOVE.L    n_loopstart(A6),$C0(A5)
  310.     MOVE.W    n_replen(A6),$C4(A5)
  311.     LEA    mt_chan2temp(PC),A6
  312.     MOVE.L    n_loopstart(A6),$B0(A5)
  313.     MOVE.W    n_replen(A6),$B4(A5)
  314.     LEA    mt_chan1temp(PC),A6
  315.     MOVE.L    n_loopstart(A6),$A0(A5)
  316.     MOVE.W    n_replen(A6),$A4(A5)
  317.  
  318. mt_dskip
  319.     ADD.W    #16,mt_PatternPos
  320.     MOVE.B    mt_PattDelTime,D0
  321.     BEQ.S    mt_dskc
  322.     MOVE.B    D0,mt_PattDelTime2
  323.     CLR.B    mt_PattDelTime
  324. mt_dskc    TST.B    mt_PattDelTime2
  325.     BEQ.S    mt_dska
  326.     SUBQ.B    #1,mt_PattDelTime2
  327.     BEQ.S    mt_dska
  328.     SUB.W    #16,mt_PatternPos
  329. mt_dska    TST.B    mt_PBreakFlag
  330.     BEQ.S    mt_nnpysk
  331.     SF    mt_PBreakFlag
  332.     MOVEQ    #0,D0
  333.     MOVE.B    mt_PBreakPos(PC),D0
  334.     CLR.B    mt_PBreakPos
  335.     LSL.W    #4,D0
  336.     MOVE.W    D0,mt_PatternPos
  337. mt_nnpysk
  338.     CMP.W    #1024,mt_PatternPos
  339.     BLO.S    mt_NoNewPosYet
  340. mt_NextPosition    
  341.     MOVEQ    #0,D0
  342.     MOVE.B    mt_PBreakPos(PC),D0
  343.     LSL.W    #4,D0
  344.     MOVE.W    D0,mt_PatternPos
  345.     CLR.B    mt_PBreakPos
  346.     CLR.B    mt_PosJumpFlag
  347.     ADDQ.B    #1,mt_SongPos
  348.     AND.B    #$7F,mt_SongPos
  349.     MOVE.B    mt_SongPos(PC),D1
  350.     MOVE.L    mt_SongDataPtr(PC),A0
  351.     CMP.B    950(A0),D1
  352.     BLO.S    mt_NoNewPosYet
  353.     CLR.B    mt_SongPos
  354. mt_NoNewPosYet    
  355.     TST.B    mt_PosJumpFlag
  356.     BNE.S    mt_NextPosition
  357.     MOVEM.L    (SP)+,D0-D4/A0-A6
  358.     RTS
  359.  
  360. mt_CheckEfx
  361.     BSR    mt_UpdateFunk
  362.     MOVE.W    n_cmd(A6),D0
  363.     AND.W    #$0FFF,D0
  364.     BEQ.S    mt_PerNop
  365.     MOVE.B    n_cmd(A6),D0
  366.     AND.B    #$0F,D0
  367.     BEQ.S    mt_Arpeggio
  368.     CMP.B    #1,D0
  369.     BEQ    mt_PortaUp
  370.     CMP.B    #2,D0
  371.     BEQ    mt_PortaDown
  372.     CMP.B    #3,D0
  373.     BEQ    mt_TonePortamento
  374.     CMP.B    #4,D0
  375.     BEQ    mt_Vibrato
  376.     CMP.B    #5,D0
  377.     BEQ    mt_TonePlusVolSlide
  378.     CMP.B    #6,D0
  379.     BEQ    mt_VibratoPlusVolSlide
  380.     CMP.B    #$E,D0
  381.     BEQ    mt_E_Commands
  382. SetBack    MOVE.W    n_period(A6),6(A5)
  383.     CMP.B    #7,D0
  384.     BEQ    mt_Tremolo
  385.     CMP.B    #$A,D0
  386.     BEQ    mt_VolumeSlide
  387. mt_Return2
  388.     RTS
  389.  
  390. mt_PerNop
  391.     MOVE.W    n_period(A6),6(A5)
  392.     RTS
  393.  
  394. mt_Arpeggio
  395.     MOVEQ    #0,D0
  396.     MOVE.B    mt_counter(PC),D0
  397.     DIVS    #3,D0
  398.     SWAP    D0
  399.     CMP.W    #0,D0
  400.     BEQ.S    mt_Arpeggio2
  401.     CMP.W    #2,D0
  402.     BEQ.S    mt_Arpeggio1
  403.     MOVEQ    #0,D0
  404.     MOVE.B    n_cmdlo(A6),D0
  405.     LSR.B    #4,D0
  406.     BRA.S    mt_Arpeggio3
  407.  
  408. mt_Arpeggio1
  409.     MOVEQ    #0,D0
  410.     MOVE.B    n_cmdlo(A6),D0
  411.     AND.B    #15,D0
  412.     BRA.S    mt_Arpeggio3
  413.  
  414. mt_Arpeggio2
  415.     MOVE.W    n_period(A6),D2
  416.     BRA.S    mt_Arpeggio4
  417.  
  418. mt_Arpeggio3
  419.     ASL.W    #1,D0
  420.     MOVEQ    #0,D1
  421.     MOVE.B    n_finetune(A6),D1
  422.     MULU    #36*2,D1
  423.     LEA    mt_PeriodTable(PC),A0
  424.     ADD.L    D1,A0
  425.     MOVEQ    #0,D1
  426.     MOVE.W    n_period(A6),D1
  427.     MOVEQ    #36,D7
  428. mt_arploop
  429.     MOVE.W    (A0,D0.W),D2
  430.     CMP.W    (A0),D1
  431.     BHS.S    mt_Arpeggio4
  432.     ADDQ.L    #2,A0
  433.     DBRA    D7,mt_arploop
  434.     RTS
  435.  
  436. mt_Arpeggio4
  437.     MOVE.W    D2,6(A5)
  438.     RTS
  439.  
  440. mt_FinePortaUp
  441.     TST.B    mt_counter
  442.     BNE.S    mt_Return2
  443.     MOVE.B    #$0F,mt_LowMask
  444. mt_PortaUp
  445.     MOVEQ    #0,D0
  446.     MOVE.B    n_cmdlo(A6),D0
  447.     AND.B    mt_LowMask(PC),D0
  448.     MOVE.B    #$FF,mt_LowMask
  449.     SUB.W    D0,n_period(A6)
  450.     MOVE.W    n_period(A6),D0
  451.     AND.W    #$0FFF,D0
  452.     CMP.W    #113,D0
  453.     BPL.S    mt_PortaUskip
  454.     AND.W    #$F000,n_period(A6)
  455.     OR.W    #113,n_period(A6)
  456. mt_PortaUskip
  457.     MOVE.W    n_period(A6),D0
  458.     AND.W    #$0FFF,D0
  459.     MOVE.W    D0,6(A5)
  460.     RTS    
  461.  
  462. mt_FinePortaDown
  463.     TST.B    mt_counter
  464.     BNE    mt_Return2
  465.     MOVE.B    #$0F,mt_LowMask
  466. mt_PortaDown
  467.     CLR.W    D0
  468.     MOVE.B    n_cmdlo(A6),D0
  469.     AND.B    mt_LowMask(PC),D0
  470.     MOVE.B    #$FF,mt_LowMask
  471.     ADD.W    D0,n_period(A6)
  472.     MOVE.W    n_period(A6),D0
  473.     AND.W    #$0FFF,D0
  474.     CMP.W    #856,D0
  475.     BMI.S    mt_PortaDskip
  476.     AND.W    #$F000,n_period(A6)
  477.     OR.W    #856,n_period(A6)
  478. mt_PortaDskip
  479.     MOVE.W    n_period(A6),D0
  480.     AND.W    #$0FFF,D0
  481.     MOVE.W    D0,6(A5)
  482.     RTS
  483.  
  484. mt_SetTonePorta
  485.     MOVE.L    A0,-(SP)
  486.     MOVE.W    (A6),D2
  487.     AND.W    #$0FFF,D2
  488.     MOVEQ    #0,D0
  489.     MOVE.B    n_finetune(A6),D0
  490.     MULU    #37*2,D0
  491.     LEA    mt_PeriodTable(PC),A0
  492.     ADD.L    D0,A0
  493.     MOVEQ    #0,D0
  494. mt_StpLoop
  495.     CMP.W    (A0,D0.W),D2
  496.     BHS.S    mt_StpFound
  497.     ADDQ.W    #2,D0
  498.     CMP.W    #37*2,D0
  499.     BLO.S    mt_StpLoop
  500.     MOVEQ    #35*2,D0
  501. mt_StpFound
  502.     MOVE.B    n_finetune(A6),D2
  503.     AND.B    #8,D2
  504.     BEQ.S    mt_StpGoss
  505.     TST.W    D0
  506.     BEQ.S    mt_StpGoss
  507.     SUBQ.W    #2,D0
  508. mt_StpGoss
  509.     MOVE.W    (A0,D0.W),D2
  510.     MOVE.L    (SP)+,A0
  511.     MOVE.W    D2,n_wantedperiod(A6)
  512.     MOVE.W    n_period(A6),D0
  513.     CLR.B    n_toneportdirec(A6)
  514.     CMP.W    D0,D2
  515.     BEQ.S    mt_ClearTonePorta
  516.     BGE    mt_Return2
  517.     MOVE.B    #1,n_toneportdirec(A6)
  518.     RTS
  519.  
  520. mt_ClearTonePorta
  521.     CLR.W    n_wantedperiod(A6)
  522.     RTS
  523.  
  524. mt_TonePortamento
  525.     MOVE.B    n_cmdlo(A6),D0
  526.     BEQ.S    mt_TonePortNoChange
  527.     MOVE.B    D0,n_toneportspeed(A6)
  528.     CLR.B    n_cmdlo(A6)
  529. mt_TonePortNoChange
  530.     TST.W    n_wantedperiod(A6)
  531.     BEQ    mt_Return2
  532.     MOVEQ    #0,D0
  533.     MOVE.B    n_toneportspeed(A6),D0
  534.     TST.B    n_toneportdirec(A6)
  535.     BNE.S    mt_TonePortaUp
  536. mt_TonePortaDown
  537.     ADD.W    D0,n_period(A6)
  538.     MOVE.W    n_wantedperiod(A6),D0
  539.     CMP.W    n_period(A6),D0
  540.     BGT.S    mt_TonePortaSetPer
  541.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  542.     CLR.W    n_wantedperiod(A6)
  543.     BRA.S    mt_TonePortaSetPer
  544.  
  545. mt_TonePortaUp
  546.     SUB.W    D0,n_period(A6)
  547.     MOVE.W    n_wantedperiod(A6),D0
  548.     CMP.W    n_period(A6),D0
  549.     BLT.S    mt_TonePortaSetPer
  550.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  551.     CLR.W    n_wantedperiod(A6)
  552.  
  553. mt_TonePortaSetPer
  554.     MOVE.W    n_period(A6),D2
  555.     MOVE.B    n_glissfunk(A6),D0
  556.     AND.B    #$0F,D0
  557.     BEQ.S    mt_GlissSkip
  558.     MOVEQ    #0,D0
  559.     MOVE.B    n_finetune(A6),D0
  560.     MULU    #36*2,D0
  561.     LEA    mt_PeriodTable(PC),A0
  562.     ADD.L    D0,A0
  563.     MOVEQ    #0,D0
  564. mt_GlissLoop
  565.     CMP.W    (A0,D0.W),D2
  566.     BHS.S    mt_GlissFound
  567.     ADDQ.W    #2,D0
  568.     CMP.W    #36*2,D0
  569.     BLO.S    mt_GlissLoop
  570.     MOVEQ    #35*2,D0
  571. mt_GlissFound
  572.     MOVE.W    (A0,D0.W),D2
  573. mt_GlissSkip
  574.     MOVE.W    D2,6(A5) ; Set period
  575.     RTS
  576.  
  577. mt_Vibrato
  578.     MOVE.B    n_cmdlo(A6),D0
  579.     BEQ.S    mt_Vibrato2
  580.     MOVE.B    n_vibratocmd(A6),D2
  581.     AND.B    #$0F,D0
  582.     BEQ.S    mt_vibskip
  583.     AND.B    #$F0,D2
  584.     OR.B    D0,D2
  585. mt_vibskip
  586.     MOVE.B    n_cmdlo(A6),D0
  587.     AND.B    #$F0,D0
  588.     BEQ.S    mt_vibskip2
  589.     AND.B    #$0F,D2
  590.     OR.B    D0,D2
  591. mt_vibskip2
  592.     MOVE.B    D2,n_vibratocmd(A6)
  593. mt_Vibrato2
  594.     MOVE.B    n_vibratopos(A6),D0
  595.     LEA    mt_VibratoTable(PC),A4
  596.     LSR.W    #2,D0
  597.     AND.W    #$001F,D0
  598.     MOVEQ    #0,D2
  599.     MOVE.B    n_wavecontrol(A6),D2
  600.     AND.B    #$03,D2
  601.     BEQ.S    mt_vib_sine
  602.     LSL.B    #3,D0
  603.     CMP.B    #1,D2
  604.     BEQ.S    mt_vib_rampdown
  605.     MOVE.B    #255,D2
  606.     BRA.S    mt_vib_set
  607. mt_vib_rampdown
  608.     TST.B    n_vibratopos(A6)
  609.     BPL.S    mt_vib_rampdown2
  610.     MOVE.B    #255,D2
  611.     SUB.B    D0,D2
  612.     BRA.S    mt_vib_set
  613. mt_vib_rampdown2
  614.     MOVE.B    D0,D2
  615.     BRA.S    mt_vib_set
  616. mt_vib_sine
  617.     MOVE.B    0(A4,D0.W),D2
  618. mt_vib_set
  619.     MOVE.B    n_vibratocmd(A6),D0
  620.     AND.W    #15,D0
  621.     MULU    D0,D2
  622.     LSR.W    #7,D2
  623.     MOVE.W    n_period(A6),D0
  624.     TST.B    n_vibratopos(A6)
  625.     BMI.S    mt_VibratoNeg
  626.     ADD.W    D2,D0
  627.     BRA.S    mt_Vibrato3
  628. mt_VibratoNeg
  629.     SUB.W    D2,D0
  630. mt_Vibrato3
  631.     MOVE.W    D0,6(A5)
  632.     MOVE.B    n_vibratocmd(A6),D0
  633.     LSR.W    #2,D0
  634.     AND.W    #$003C,D0
  635.     ADD.B    D0,n_vibratopos(A6)
  636.     RTS
  637.  
  638. mt_TonePlusVolSlide
  639.     BSR    mt_TonePortNoChange
  640.     BRA    mt_VolumeSlide
  641.  
  642. mt_VibratoPlusVolSlide
  643.     BSR.S    mt_Vibrato2
  644.     BRA    mt_VolumeSlide
  645.  
  646. mt_Tremolo
  647.     MOVE.B    n_cmdlo(A6),D0
  648.     BEQ.S    mt_Tremolo2
  649.     MOVE.B    n_tremolocmd(A6),D2
  650.     AND.B    #$0F,D0
  651.     BEQ.S    mt_treskip
  652.     AND.B    #$F0,D2
  653.     OR.B    D0,D2
  654. mt_treskip
  655.     MOVE.B    n_cmdlo(A6),D0
  656.     AND.B    #$F0,D0
  657.     BEQ.S    mt_treskip2
  658.     AND.B    #$0F,D2
  659.     OR.B    D0,D2
  660. mt_treskip2
  661.     MOVE.B    D2,n_tremolocmd(A6)
  662. mt_Tremolo2
  663.     MOVE.B    n_tremolopos(A6),D0
  664.     LEA    mt_VibratoTable(PC),A4
  665.     LSR.W    #2,D0
  666.     AND.W    #$001F,D0
  667.     MOVEQ    #0,D2
  668.     MOVE.B    n_wavecontrol(A6),D2
  669.     LSR.B    #4,D2
  670.     AND.B    #$03,D2
  671.     BEQ.S    mt_tre_sine
  672.     LSL.B    #3,D0
  673.     CMP.B    #1,D2
  674.     BEQ.S    mt_tre_rampdown
  675.     MOVE.B    #255,D2
  676.     BRA.S    mt_tre_set
  677. mt_tre_rampdown
  678.     TST.B    n_vibratopos(A6)
  679.     BPL.S    mt_tre_rampdown2
  680.     MOVE.B    #255,D2
  681.     SUB.B    D0,D2
  682.     BRA.S    mt_tre_set
  683. mt_tre_rampdown2
  684.     MOVE.B    D0,D2
  685.     BRA.S    mt_tre_set
  686. mt_tre_sine
  687.     MOVE.B    0(A4,D0.W),D2
  688. mt_tre_set
  689.     MOVE.B    n_tremolocmd(A6),D0
  690.     AND.W    #15,D0
  691.     MULU    D0,D2
  692.     LSR.W    #6,D2
  693.     MOVEQ    #0,D0
  694.     MOVE.B    n_volume(A6),D0
  695.     TST.B    n_tremolopos(A6)
  696.     BMI.S    mt_TremoloNeg
  697.     ADD.W    D2,D0
  698.     BRA.S    mt_Tremolo3
  699. mt_TremoloNeg
  700.     SUB.W    D2,D0
  701. mt_Tremolo3
  702.     BPL.S    mt_TremoloSkip
  703.     CLR.W    D0
  704. mt_TremoloSkip
  705.     CMP.W    #$40,D0
  706.     BLS.S    mt_TremoloOk
  707.     MOVE.W    #$40,D0
  708. mt_TremoloOk
  709.     MOVE.W    D0,8(A5)
  710.     MOVE.B    n_tremolocmd(A6),D0
  711.     LSR.W    #2,D0
  712.     AND.W    #$003C,D0
  713.     ADD.B    D0,n_tremolopos(A6)
  714.     RTS
  715.  
  716. mt_SampleOffset
  717.     MOVEQ    #0,D0
  718.     MOVE.B    n_cmdlo(A6),D0
  719.     BEQ.S    mt_sononew
  720.     MOVE.B    D0,n_sampleoffset(A6)
  721. mt_sononew
  722.     MOVE.B    n_sampleoffset(A6),D0
  723.     LSL.W    #7,D0
  724.     CMP.W    n_length(A6),D0
  725.     BGE.S    mt_sofskip
  726.     SUB.W    D0,n_length(A6)
  727.     LSL.W    #1,D0
  728.     ADD.L    D0,n_start(A6)
  729.     RTS
  730. mt_sofskip
  731.     MOVE.W    #$0001,n_length(A6)
  732.     RTS
  733.  
  734. mt_VolumeSlide
  735.     MOVEQ    #0,D0
  736.     MOVE.B    n_cmdlo(A6),D0
  737.     LSR.B    #4,D0
  738.     TST.B    D0
  739.     BEQ.S    mt_VolSlideDown
  740. mt_VolSlideUp
  741.     ADD.B    D0,n_volume(A6)
  742.     CMP.B    #$40,n_volume(A6)
  743.     BMI.S    mt_vsuskip
  744.     MOVE.B    #$40,n_volume(A6)
  745. mt_vsuskip
  746.     MOVE.B    n_volume(A6),D0
  747.     MOVE.W    D0,8(A5)
  748.     RTS
  749.  
  750. mt_VolSlideDown
  751.     MOVEQ    #0,D0
  752.     MOVE.B    n_cmdlo(A6),D0
  753.     AND.B    #$0F,D0
  754. mt_VolSlideDown2
  755.     SUB.B    D0,n_volume(A6)
  756.     BPL.S    mt_vsdskip
  757.     CLR.B    n_volume(A6)
  758. mt_vsdskip
  759.     MOVE.B    n_volume(A6),D0
  760.     MOVE.W    D0,8(A5)
  761.     RTS
  762.  
  763. mt_PositionJump
  764.     MOVE.B    n_cmdlo(A6),D0
  765.     SUBQ.B    #1,D0
  766.     MOVE.B    D0,mt_SongPos
  767. mt_pj2    CLR.B    mt_PBreakPos
  768.     ST     mt_PosJumpFlag
  769.     RTS
  770.  
  771. mt_VolumeChange
  772.     MOVEQ    #0,D0
  773.     MOVE.B    n_cmdlo(A6),D0
  774.     CMP.B    #$40,D0
  775.     BLS.S    mt_VolumeOk
  776.     MOVEQ    #$40,D0
  777. mt_VolumeOk
  778.     MOVE.B    D0,n_volume(A6)
  779.     MOVE.W    D0,8(A5)
  780.     RTS
  781.  
  782. mt_PatternBreak
  783.     MOVEQ    #0,D0
  784.     MOVE.B    n_cmdlo(A6),D0
  785.     MOVE.L    D0,D2
  786.     LSR.B    #4,D0
  787.     MULU    #10,D0
  788.     AND.B    #$0F,D2
  789.     ADD.B    D2,D0
  790.     CMP.B    #63,D0
  791.     BHI.S    mt_pj2
  792.     MOVE.B    D0,mt_PBreakPos
  793.     ST    mt_PosJumpFlag
  794.     RTS
  795.  
  796. mt_SetSpeed
  797.     MOVE.B    3(A6),D0
  798.     BEQ    mt_Return2
  799.     CLR.B    mt_counter
  800.     MOVE.B    D0,mt_speed
  801.     RTS
  802.  
  803. mt_CheckMoreEfx
  804.     BSR    mt_UpdateFunk
  805.     MOVE.B    2(A6),D0
  806.     AND.B    #$0F,D0
  807.     CMP.B    #$9,D0
  808.     BEQ    mt_SampleOffset
  809.     CMP.B    #$B,D0
  810.     BEQ    mt_PositionJump
  811.     CMP.B    #$D,D0
  812.     BEQ.S    mt_PatternBreak
  813.     CMP.B    #$E,D0
  814.     BEQ.S    mt_E_Commands
  815.     CMP.B    #$F,D0
  816.     BEQ.S    mt_SetSpeed
  817.     CMP.B    #$C,D0
  818.     BEQ    mt_VolumeChange
  819.     BRA    mt_PerNop
  820.  
  821. mt_E_Commands
  822.     MOVE.B    n_cmdlo(A6),D0
  823.     AND.B    #$F0,D0
  824.     LSR.B    #4,D0
  825.     BEQ.S    mt_FilterOnOff
  826.     CMP.B    #1,D0
  827.     BEQ    mt_FinePortaUp
  828.     CMP.B    #2,D0
  829.     BEQ    mt_FinePortaDown
  830.     CMP.B    #3,D0
  831.     BEQ.S    mt_SetGlissControl
  832.     CMP.B    #4,D0
  833.     BEQ    mt_SetVibratoControl
  834.     CMP.B    #5,D0
  835.     BEQ    mt_SetFineTune
  836.     CMP.B    #6,D0
  837.     BEQ    mt_JumpLoop
  838.     CMP.B    #7,D0
  839.     BEQ    mt_SetTremoloControl
  840.     CMP.B    #9,D0
  841.     BEQ    mt_RetrigNote
  842.     CMP.B    #$A,D0
  843.     BEQ    mt_VolumeFineUp
  844.     CMP.B    #$B,D0
  845.     BEQ    mt_VolumeFineDown
  846.     CMP.B    #$C,D0
  847.     BEQ    mt_NoteCut
  848.     CMP.B    #$D,D0
  849.     BEQ    mt_NoteDelay
  850.     CMP.B    #$E,D0
  851.     BEQ    mt_PatternDelay
  852.     CMP.B    #$F,D0
  853.     BEQ    mt_FunkIt
  854.     RTS
  855.  
  856. mt_FilterOnOff
  857.     MOVE.B    n_cmdlo(A6),D0
  858.     AND.B    #1,D0
  859.     ASL.B    #1,D0
  860.     AND.B    #$FD,$BFE001
  861.     OR.B    D0,$BFE001
  862.     RTS    
  863.  
  864. mt_SetGlissControl
  865.     MOVE.B    n_cmdlo(A6),D0
  866.     AND.B    #$0F,D0
  867.     AND.B    #$F0,n_glissfunk(A6)
  868.     OR.B    D0,n_glissfunk(A6)
  869.     RTS
  870.  
  871. mt_SetVibratoControl
  872.     MOVE.B    n_cmdlo(A6),D0
  873.     AND.B    #$0F,D0
  874.     AND.B    #$F0,n_wavecontrol(A6)
  875.     OR.B    D0,n_wavecontrol(A6)
  876.     RTS
  877.  
  878. mt_SetFineTune
  879.     MOVE.B    n_cmdlo(A6),D0
  880.     AND.B    #$0F,D0
  881.     MOVE.B    D0,n_finetune(A6)
  882.     RTS
  883.  
  884. mt_JumpLoop
  885.     TST.B    mt_counter
  886.     BNE    mt_Return2
  887.     MOVE.B    n_cmdlo(A6),D0
  888.     AND.B    #$0F,D0
  889.     BEQ.S    mt_SetLoop
  890.     TST.B    n_loopcount(A6)
  891.     BEQ.S    mt_jumpcnt
  892.     SUBQ.B    #1,n_loopcount(A6)
  893.     BEQ    mt_Return2
  894. mt_jmploop    MOVE.B    n_pattpos(A6),mt_PBreakPos
  895.     ST    mt_PBreakFlag
  896.     RTS
  897.  
  898. mt_jumpcnt
  899.     MOVE.B    D0,n_loopcount(A6)
  900.     BRA.S    mt_jmploop
  901.  
  902. mt_SetLoop
  903.     MOVE.W    mt_PatternPos(PC),D0
  904.     LSR.W    #4,D0
  905.     MOVE.B    D0,n_pattpos(A6)
  906.     RTS
  907.  
  908. mt_SetTremoloControl
  909.     MOVE.B    n_cmdlo(A6),D0
  910.     AND.B    #$0F,D0
  911.     LSL.B    #4,D0
  912.     AND.B    #$0F,n_wavecontrol(A6)
  913.     OR.B    D0,n_wavecontrol(A6)
  914.     RTS
  915.  
  916. mt_RetrigNote
  917.     MOVE.L    D1,-(SP)
  918.     MOVEQ    #0,D0
  919.     MOVE.B    n_cmdlo(A6),D0
  920.     AND.B    #$0F,D0
  921.     BEQ.S    mt_rtnend
  922.     MOVEQ    #0,D1
  923.     MOVE.B    mt_counter(PC),D1
  924.     BNE.S    mt_rtnskp
  925.     MOVE.W    (A6),D1
  926.     AND.W    #$0FFF,D1
  927.     BNE.S    mt_rtnend
  928.     MOVEQ    #0,D1
  929.     MOVE.B    mt_counter(PC),D1
  930. mt_rtnskp
  931.     DIVU    D0,D1
  932.     SWAP    D1
  933.     TST.W    D1
  934.     BNE.S    mt_rtnend
  935. mt_DoRetrig
  936.     MOVE.W    n_dmabit(A6),$DFF096    ; Channel DMA off
  937.     MOVE.L    n_start(A6),(A5)    ; Set sampledata pointer
  938.     MOVE.W    n_length(A6),4(A5)    ; Set length
  939.     MOVE.W    #300,D0
  940. mt_rtnloop1
  941.     DBRA    D0,mt_rtnloop1
  942.     MOVE.W    n_dmabit(A6),D0
  943.     BSET    #15,D0
  944.     MOVE.W    D0,$DFF096
  945.     MOVE.W    #300,D0
  946. mt_rtnloop2
  947.     DBRA    D0,mt_rtnloop2
  948.     MOVE.L    n_loopstart(A6),(A5)
  949.     MOVE.L    n_replen(A6),4(A5)
  950. mt_rtnend
  951.     MOVE.L    (SP)+,D1
  952.     RTS
  953.  
  954. mt_VolumeFineUp
  955.     TST.B    mt_counter
  956.     BNE    mt_Return2
  957.     MOVEQ    #0,D0
  958.     MOVE.B    n_cmdlo(A6),D0
  959.     AND.B    #$F,D0
  960.     BRA    mt_VolSlideUp
  961.  
  962. mt_VolumeFineDown
  963.     TST.B    mt_counter
  964.     BNE    mt_Return2
  965.     MOVEQ    #0,D0
  966.     MOVE.B    n_cmdlo(A6),D0
  967.     AND.B    #$0F,D0
  968.     BRA    mt_VolSlideDown2
  969.  
  970. mt_NoteCut
  971.     MOVEQ    #0,D0
  972.     MOVE.B    n_cmdlo(A6),D0
  973.     AND.B    #$0F,D0
  974.     CMP.B    mt_counter(PC),D0
  975.     BNE    mt_Return2
  976.     CLR.B    n_volume(A6)
  977.     MOVE.W    #0,8(A5)
  978.     RTS
  979.  
  980. mt_NoteDelay
  981.     MOVEQ    #0,D0
  982.     MOVE.B    n_cmdlo(A6),D0
  983.     AND.B    #$0F,D0
  984.     CMP.B    mt_counter,D0
  985.     BNE    mt_Return2
  986.     MOVE.W    (A6),D0
  987.     BEQ    mt_Return2
  988.     MOVE.L    D1,-(SP)
  989.     BRA    mt_DoRetrig
  990.  
  991. mt_PatternDelay
  992.     TST.B    mt_counter
  993.     BNE    mt_Return2
  994.     MOVEQ    #0,D0
  995.     MOVE.B    n_cmdlo(A6),D0
  996.     AND.B    #$0F,D0
  997.     TST.B    mt_PattDelTime2
  998.     BNE    mt_Return2
  999.     ADDQ.B    #1,D0
  1000.     MOVE.B    D0,mt_PattDelTime
  1001.     RTS
  1002.  
  1003. mt_FunkIt
  1004.     TST.B    mt_counter
  1005.     BNE    mt_Return2
  1006.     MOVE.B    n_cmdlo(A6),D0
  1007.     AND.B    #$0F,D0
  1008.     LSL.B    #4,D0
  1009.     AND.B    #$0F,n_glissfunk(A6)
  1010.     OR.B    D0,n_glissfunk(A6)
  1011.     TST.B    D0
  1012.     BEQ    mt_Return2
  1013. mt_UpdateFunk
  1014.     MOVEM.L    A0/D1,-(SP)
  1015.     MOVEQ    #0,D0
  1016.     MOVE.B    n_glissfunk(A6),D0
  1017.     LSR.B    #4,D0
  1018.     BEQ.S    mt_funkend
  1019.     LEA    mt_FunkTable(PC),A0
  1020.     MOVE.B    (A0,D0.W),D0
  1021.     ADD.B    D0,n_funkoffset(A6)
  1022.     BTST    #7,n_funkoffset(A6)
  1023.     BEQ.S    mt_funkend
  1024.     CLR.B    n_funkoffset(A6)
  1025.  
  1026.     MOVE.L    n_loopstart(A6),D0
  1027.     MOVEQ    #0,D1
  1028.     MOVE.W    n_replen(A6),D1
  1029.     ADD.L    D1,D0
  1030.     ADD.L    D1,D0
  1031.     MOVE.L    n_wavestart(A6),A0
  1032.     ADDQ.L    #1,A0
  1033.     CMP.L    D0,A0
  1034.     BLO.S    mt_funkok
  1035.     MOVE.L    n_loopstart(A6),A0
  1036. mt_funkok
  1037.     MOVE.L    A0,n_wavestart(A6)
  1038.     MOVEQ    #-1,D0
  1039.     SUB.B    (A0),D0
  1040.     MOVE.B    D0,(A0)
  1041. mt_funkend
  1042.     MOVEM.L    (SP)+,A0/D1
  1043.     RTS
  1044.  
  1045.  
  1046. mt_FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  1047.  
  1048. mt_VibratoTable    
  1049.     dc.b   0, 24, 49, 74, 97,120,141,161
  1050.     dc.b 180,197,212,224,235,244,250,253
  1051.     dc.b 255,253,250,244,235,224,212,197
  1052.     dc.b 180,161,141,120, 97, 74, 49, 24
  1053.  
  1054. mt_PeriodTable
  1055. ; Tuning 0, Normal
  1056.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  1057.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  1058.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  1059. ; Tuning 1
  1060.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  1061.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  1062.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  1063. ; Tuning 2
  1064.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  1065.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  1066.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  1067. ; Tuning 3
  1068.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  1069.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1070.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  1071. ; Tuning 4
  1072.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1073.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1074.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  1075. ; Tuning 5
  1076.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1077.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1078.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  1079. ; Tuning 6
  1080.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1081.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1082.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  1083. ; Tuning 7
  1084.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1085.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1086.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  1087. ; Tuning -8
  1088.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1089.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1090.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  1091. ; Tuning -7
  1092.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1093.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1094.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  1095. ; Tuning -6
  1096.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1097.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1098.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  1099. ; Tuning -5
  1100.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1101.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1102.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  1103. ; Tuning -4
  1104.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1105.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1106.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  1107. ; Tuning -3
  1108.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1109.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1110.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  1111. ; Tuning -2
  1112.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1113.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1114.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  1115. ; Tuning -1
  1116.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1117.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1118.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  1119.  
  1120. mt_chan1temp    dc.l    0,0,0,0,0,$00010000,0,  0,0,0,0
  1121. mt_chan2temp    dc.l    0,0,0,0,0,$00020000,0,  0,0,0,0
  1122. mt_chan3temp    dc.l    0,0,0,0,0,$00040000,0,  0,0,0,0
  1123. mt_chan4temp    dc.l    0,0,0,0,0,$00080000,0,  0,0,0,0
  1124.  
  1125. mt_SampleStarts    dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1126.         dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1127.  
  1128. mt_SongDataPtr    dc.l 0
  1129.  
  1130. mt_speed    dc.b 6
  1131. mt_counter    dc.b 0
  1132. mt_SongPos    dc.b 0
  1133. mt_PBreakPos    dc.b 0
  1134. mt_PosJumpFlag    dc.b 0
  1135. mt_PBreakFlag    dc.b 0
  1136. mt_LowMask    dc.b 0
  1137. mt_PattDelTime    dc.b 0
  1138. mt_PattDelTime2    dc.b 0,0
  1139.  
  1140. mt_PatternPos    dc.w 0
  1141. mt_DMACONtemp    dc.w 0
  1142.  
  1143. ;/* End of File */
  1144. mt_data: incbin "work:andy's_tunes/twochantrack"